/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.arqsw.servicios;

import java.util.ArrayList;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.EJBTransactionRolledbackException;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import uy.edu.ort.arqsw.domino.EntradaBlog;
import uy.edu.ort.arqsw.util.UtilXML;

/**
 *
 * @author victor
 */
@WebService(serviceName = "EntradaBlogWS")
@DeclareRoles({"usuario", "administrador"})
@Stateless()
public class EntradaBlogWS {
    @EJB
    EntradaBlogFacadeLocal entradablogEJB;

    @RolesAllowed({"usuario", "administrador"})
    @WebMethod(operationName = "obtenerTodasEntradasBlog")
    public String obtenerTodasEntradasBlog() {
        ResultadoEntradasBlog res = new ResultadoEntradasBlog();

        try {
            res.setResultado(entradablogEJB.obtenerTodas());
            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
        } catch (Exception exc) {
            res.setResultado(new ArrayList<EntradaBlog>());
            res.setResultadoCorrecto(false);
            res.setDescripcion(exc.getMessage());
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoEntradaBlog(res, true);
        } catch (Throwable ex) {
            cadena = ex.getMessage();
        }
        
        return cadena;
    }

    @RolesAllowed({"usuario", "administrador"})
    @WebMethod(operationName = "buscarEntradaBlog")
    public String buscarEntradaBlog(@WebParam(name = "strEntradaBlog") String strEntradaBlog) {
        ResultadoEntradasBlog res = new ResultadoEntradasBlog();

        try {
            EntradaBlog entradablog = UtilXML.parseEntradaBlog(strEntradaBlog, true);
            res.setResultado(entradablogEJB.buscar(entradablog.getFecha(), 
                    entradablog.getTitulo(), 
                    entradablog.getAutor(), 
                    entradablog.getContenido(), 
                    entradablog.getTags()));
            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
        } catch (Exception exc) {
            res.setResultado(new ArrayList<EntradaBlog>());
            res.setResultadoCorrecto(false);
            res.setDescripcion(exc.getMessage());
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoEntradaBlog(res, true);
        } catch (Throwable ex) {
            cadena = ex.getMessage();
        }
        
        return cadena;
    }
    
    @RolesAllowed("administrador")
    @WebMethod(operationName = "crearEntradaBlog")
    public String crearEntradaBlog(@WebParam(name = "strEntradaBlog") String strEntradaBlog) {
        ResultadoEntradasBlog res = new ResultadoEntradasBlog();
                
        try {
            EntradaBlog entradablog = UtilXML.parseEntradaBlog(strEntradaBlog, true);
            //entradablog.setId(Long.MIN_VALUE);
            entradablogEJB.crear(entradablog);

            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
            res.getResultado().add(entradablog);
        } catch (EJBTransactionRolledbackException ex) {
            res.setResultadoCorrecto(false);
            res.setDescripcion("Error al insertar en la BD");
        } catch (Throwable ex) {
            res.setResultadoCorrecto(false);
            if (ex.getMessage() == null) {
                res.setDescripcion(ex.toString());
            } else {
                res.setDescripcion(ex.getMessage());
            }
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoEntradaBlog(res, true);
        } catch (Throwable ex) {
            cadena = ex.getMessage();
        }
        
        return cadena;
    }
    
    @RolesAllowed("administrador")
    @WebMethod(operationName = "removerEntradaBlog")
    public String removerEntradaBlog(@WebParam(name = "strEntradaBlog") String strEntradaBlog) {
        ResultadoEntradasBlog res = new ResultadoEntradasBlog();
        
        try {
            EntradaBlog entradablog = UtilXML.parseEntradaBlog(strEntradaBlog, true);
            entradablogEJB.remover(entradablog);

            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
            res.getResultado().add(entradablog);
        } catch (Throwable ex) {
            res.setResultadoCorrecto(false);
            res.setDescripcion(ex.getMessage());
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoEntradaBlog(res, true);
        } catch (Throwable ex) {
            cadena = ex.getMessage();
        }
        
        return cadena;
    }
    
    @RolesAllowed("administrador")
    @WebMethod(operationName = "editarEntradaBlog")
    public String editarEntradaBlog(@WebParam(name = "strEntradaBlogOriginal") String strEntradaBlogOriginal, 
                                    @WebParam(name = "strEntradaBlogModificada") String strEntradaBlogModificada) {
        ResultadoEntradasBlog res = new ResultadoEntradasBlog();
        
        try {
            EntradaBlog entradablogoriginal = UtilXML.parseEntradaBlog(strEntradaBlogOriginal, true);
            EntradaBlog entradablogmodificada = UtilXML.parseEntradaBlog(strEntradaBlogModificada, true);
            entradablogEJB.editar(entradablogoriginal, entradablogmodificada);

            res.setResultadoCorrecto(true);
            res.setDescripcion("OK");
            res.getResultado().add(entradablogmodificada);
        } catch (Throwable ex) {
            res.setResultadoCorrecto(false);
            res.setDescripcion(ex.getMessage());
        }
        
        String cadena;
        try {
            cadena = UtilXML.parseResultadoEntradaBlog(res, true);
        } catch (Throwable ex) {
            cadena = ex.getMessage();
        }
        
        return cadena;
    }
    
}
